package hr.ctg.service.dao;

import hr.ctg.domain.model.DojamPosjetitelja;
import hr.jpa.dao.GenericDAOImpl;

import java.util.List;

import javax.persistence.NoResultException;

import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.log.Log;

@AutoCreate
@Name("dojamPosjetiteljaDAO")
public class DojamPosjetiteljaDAO extends
		GenericDAOImpl<DojamPosjetitelja, Integer> {

	@Logger
	Log log;

	public DojamPosjetitelja findByIdObjektaIdKorisnika(
			final Integer idObjekta, final Integer idKorisnika) {
		DojamPosjetitelja dojamPosjetitelja = null;
		try {
			dojamPosjetitelja = (DojamPosjetitelja) entityManager
					.createNamedQuery(
							"DojamPosjetitelja.findByIdObjektaIdKorisnika")
					.setParameter(1, idObjekta).setParameter(2, idKorisnika)
					.getSingleResult();
		} catch (final NoResultException localNoResultException) {
		}
		return dojamPosjetitelja;
	}

	public DojamPosjetitelja findByIdMjestaIdKorisnika(final Integer idMjesta,
			final Integer idKorisnika) {
		DojamPosjetitelja dojamPosjetitelja = null;
		try {
			dojamPosjetitelja = (DojamPosjetitelja) entityManager
					.createNamedQuery(
							"DojamPosjetitelja.findByIdMjestaIdKorisnika")
					.setParameter(1, idMjesta).setParameter(2, idKorisnika)
					.getSingleResult();
		} catch (final NoResultException localNoResultException) {
		}
		return dojamPosjetitelja;
	}

	public DojamPosjetitelja findByIdOtokaIdKorisnika(final Integer idOtoka,
			final Integer idKorisnika) {
		DojamPosjetitelja dojamPosjetitelja = null;
		try {
			dojamPosjetitelja = (DojamPosjetitelja) entityManager
					.createNamedQuery(
							"DojamPosjetitelja.findByIdOtokaIdKorisnika")
					.setParameter(1, idOtoka).setParameter(2, idKorisnika)
					.getSingleResult();
		} catch (final NoResultException localNoResultException) {
		}
		return dojamPosjetitelja;
	}

	public Integer findDojamCount(final Integer objektId) {
		Long count;
		if (objektId != null) {
			count = (Long) entityManager.createNamedQuery(
					"DojamPosjetitelja.findDojamCount").setParameter(1,
					objektId).getSingleResult();
		} else {
			count = (Long) entityManager.createNamedQuery(
					"DojamPosjetitelja.findCompleteDojamCount")
					.getSingleResult();
		}

		return Integer.valueOf(count.intValue());
	}

	public Integer findVotesCount(final Integer objektId) {
		final Long count = (Long) entityManager.createNamedQuery(
				"DojamPosjetitelja.findVotesCount").setParameter(1, objektId)
				.getSingleResult();

		return Integer.valueOf(count.intValue());
	}

	@SuppressWarnings("unchecked")
	public List<DojamPosjetitelja> findLastDojmovi(final Integer max) {
		return entityManager.createNamedQuery(
				"DojamPosjetitelja.findLastDojams").setMaxResults(
				max.intValue()).getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<DojamPosjetitelja> findByIdObjekta(final Integer idObjekta) {
		return entityManager.createNamedQuery(
				"DojamPosjetitelja.findByIdObjekta").setParameter(1, idObjekta)
				.getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<DojamPosjetitelja> findByIdObjektaNKNotNull(
			final Integer idObjekta) {
		return entityManager.createNamedQuery(
				"DojamPosjetitelja.findByIdObjektaNKNotNull").setParameter(1,
				idObjekta).getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<DojamPosjetitelja> findByIdKorisnika(final Integer idKorisnika) {
		return entityManager.createNamedQuery(
				"DojamPosjetitelja.findByIdKorisnika").setParameter(1,
				idKorisnika).getResultList();
	}

	public DojamPosjetitelja findByIdParkaIdKorisnika(final Integer idParka,
			final Integer idKorisnika) {
		DojamPosjetitelja dojamPosjetitelja = null;
		try {
			dojamPosjetitelja = (DojamPosjetitelja) entityManager
					.createNamedQuery(
							"DojamPosjetitelja.findByIdParkaIdKorisnika")
					.setParameter(1, idParka).setParameter(2, idKorisnika)
					.getSingleResult();
		} catch (final NoResultException localNoResultException) {
		}
		return dojamPosjetitelja;
	}

	@SuppressWarnings("unchecked")
	public List<DojamPosjetitelja> findByIdMjesta(final Integer idMjesta) {
		return entityManager.createNamedQuery(
				"DojamPosjetitelja.findByIdMjesta").setParameter(1, idMjesta)
				.getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<DojamPosjetitelja> findByIdOtoka(final Integer idOtoka) {
		return entityManager
				.createNamedQuery("DojamPosjetitelja.findByIdOtoka")
				.setParameter(1, idOtoka).getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<DojamPosjetitelja> findByIdParka(final Integer idParka) {
		return entityManager
				.createNamedQuery("DojamPosjetitelja.findByIdParka")
				.setParameter(1, idParka).getResultList();
	}
}